import dayjs from 'dayjs'

/**
 * 格式化时间
 *
 * @param date 日期对象或日期字符串
 * @returns 格式化后的日期字符串，格式为 'YYYY/MM/DD hh:mm'
 */
export const FormatTime = (date: Date | number) => {
  return dayjs(date).format('YYYY/MM/DD hh:mm')
}

/**
 * 从本地存储中获取指定键的值
 *
 * @param key 键值
 * @returns 返回解析后的值，如果未找到则返回null
 */
export const localGetItem = (key: string): any => {
  let data_str = localStorage.getItem(key)
  if (data_str) {
    return JSON.parse(data_str)
  }
  return null
}

/**
 * 将数据保存到本地存储中
 *
 * @param key 数据的键名
 * @param value 要保存的数据，可以是任意类型
 * @returns 无返回值
 */
export const localSetItem = (key: string, value: any): void => {
  localStorage.setItem(key, JSON.stringify(value))
}

// 生成随机 ID
export const geneId = (): number => {
  return Math.floor(Math.random() * 939874)
}

export const ImitateHttp = (fun: (s: Function, f: Function) => void, timer = 1000) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => fun(resolve, reject), timer)
  })
}

// 防抖函数
export const debounce = (fn: Function, delay = 1600) => {
  // 定时器
  let timer: number | null = null;

  // 将debounce处理结果当作函数返回
  return (...args: any[]) => {
    // 每次事件被触发时，都去清除之前的旧定时器
    if (timer) {
      clearTimeout(timer);
    }
    // 设立新定时器
    timer = setTimeout(function () {
      fn(...args);
    }, delay);
  };
};